#include <iostream>
using std::cout;
using std::endl;
//打印出可变参数的所有参数内容
//省略号在参数的左边表示的是打包操作
//省略号如果在参数的右边表示的是解包操作
template <class ...Args>
void display(Args ...args){

}

//所以解包的时候，解包到最后肯定会形成无参，此时会调用display2()函数
//但是目前并没有提供，所以需要设置递归的出口
//能不能提前设定出口呢？
//无参的时候设置一个出口，或者换一个思路：一个参数的时候设置一个出口
void display2(){

}
template <class T, class ...Args>
void display2(T t, Args ... args){
    cout << t << endl;
    //将args进行解包操作，解出来一个参数，进一步调用display2
    display2(args...);
}
//上述两个函数是否等价？？？？？？等价

void test(){
    display2(1, 2, 3.0, "hello", true);
}
void test2(){
    //相当于将1 2 3.0 hello true全部打包给args
    display(1, 2, 3.0, "hello", true);
    //相当于将1给t，2 3.0 hello true打包给args
    display2(1, 2, 3.0, "hello", true);

}
int main()
{
    test();
    return 0;
}

